﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;
using CustomListView = PortalCurriculo.Util.CustomControls.ListView;

namespace PortalCurriculo.WebUI.Empresas
{
    public partial class CadastroConsultoria : CompanyAccessHelper
    {
        static List<EmpresaConsultoria> MinhasConsultorias { get; set; }
        static List<Empresa> ConsultoriasPesquisa { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            var empresa = (Empresa)SessionHelper.Session(SessionHelper.SessionName.EmpresaLogada);

            MinhasConsultorias = new EmpresaConsultoria {IdEmpresa = empresa.Id}.SelecionarLista();

            lsvConsultoria.DataSource = MinhasConsultorias;
            lsvConsultoria.DataBind();
        }

        protected void lsvConsultoriaPesquisa_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var empresa = (Empresa)item.DataItem;

            var nome = (Label)item.FindControl("lblNome");
            var email = (Label)item.FindControl("lblEmail");
            var site = (Label)item.FindControl("lblSite");
            var telefone = (Label)item.FindControl("lblTelefone");
            var adicionar = (ImageButton)item.FindControl("imbAdicionar");

            nome.Text = empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia;
            email.Text = empresa.Usuario.Pessoa.Email;
            site.Text = empresa.Usuario.Pessoa.Site;
            telefone.Text = empresa.Usuario.Pessoa.Telefones.Count > 0
                                ? empresa.Usuario.Pessoa.Telefones.First().Numero
                                : string.Empty;
            adicionar.Attributes.Add("Id", empresa.Id.ToString());
        }

        protected void imbExcluir_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton)sender).Attributes["Id"]);

            var empresaConsultoria = (from consultoria in MinhasConsultorias
                                      where consultoria.Id.Equals(id)
                                      select consultoria).First();

            empresaConsultoria.Delete();

            MinhasConsultorias.Remove(empresaConsultoria);

            lsvConsultoria.DataSource = MinhasConsultorias;
            lsvConsultoria.DataBind();
        }

        protected void lsvConsultoria_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var empresaConsultoria = (EmpresaConsultoria)item.DataItem;

            var nome = (Label)item.FindControl("lblNome");
            var email = (Label)item.FindControl("lblEmail");
            var site = (Label)item.FindControl("lblSite");
            var telefone = (Label)item.FindControl("lblTelefone");
            var excluir = (ImageButton)item.FindControl("imbExcluir");

            nome.Text = empresaConsultoria.Empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia;
            email.Text = empresaConsultoria.Empresa.Usuario.Pessoa.Email;
            site.Text = empresaConsultoria.Empresa.Usuario.Pessoa.Site;
            excluir.Attributes.Add("Id", empresaConsultoria.Id.ToString());

            if (empresaConsultoria.Empresa.Usuario.Pessoa.Telefones.Count > 0)
                telefone.Text = empresaConsultoria.Empresa.Usuario.Pessoa.Telefones.First().Numero;
        }

        protected void imbAdicionar_Click(object sender, ImageClickEventArgs e)
        {
            var empresa = ((Empresa)SessionHelper.Session(SessionHelper.SessionName.EmpresaLogada));

            var empresaConsultoria = new EmpresaConsultoria()
                                            {
                                                IdEmpresa = empresa.Id,
                                                IdConsultoria = int.Parse(((ImageButton)sender).Attributes["Id"])
                                            };

            empresaConsultoria.Save();

            if (MinhasConsultorias == null) MinhasConsultorias = new List<EmpresaConsultoria>();
            
            //Incluindo no grid de minhas consultorias
            MinhasConsultorias.Add(empresaConsultoria);
            lsvConsultoria.OrderBy(MinhasConsultorias, CustomListView.Order.Ascending, "Empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia");

            //Excluindo do grid de pesquisa
            ConsultoriasPesquisa.Remove(empresaConsultoria.Empresa);
            lsvConsultoriaPesquisa.OrderBy(ConsultoriasPesquisa, CustomListView.Order.Ascending, "Usuario.Pessoa.PessoaJuridica.NomeFantasia");

            WebHelper.ShowMessageBox("Selecionador incluído com sucesso!", ref UpdatePanelConsultoria);
        }

        protected void lnkPesquisar_Click(object sender, EventArgs e)
        {
            ConsultoriasPesquisa = new Empresa().SelecionarConsultorias(txtNome.Text, txtCNPJ.Text);

            var empresa = (Empresa)SessionHelper.Session(SessionHelper.SessionName.EmpresaLogada);

            if (ConsultoriasPesquisa != null)
            {
                ConsultoriasPesquisa.Remove(empresa);

                if (MinhasConsultorias != null)
                {
                    foreach (var consultoriaEmpresa in MinhasConsultorias)
                    {
                        ConsultoriasPesquisa.Remove(consultoriaEmpresa.Empresa);
                    }
                }
            }

            lsvConsultoriaPesquisa.OrderBy(ConsultoriasPesquisa, CustomListView.Order.Ascending, "Usuario.Pessoa.PessoaJuridica.NomeFantasia");
        }
    }
}